<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        ul,
        li {
            list-style: none;
        }

        #container {
            position: relative;
            /* 根据图片尺寸的比例设置的 */
            width: 700px;
            height: 360px;
            border: 1px solid #000;
            margin: 50px auto;
        }

        #container ul li {
            height: 360px;

            top: 0;
            position: absolute;
            perspective: 50000px;
            transform-style: preserve-3d;

            transition: all 1s ease 0s;
        }

        #container ul li div {
            position: absolute;
            top: 0;
            left: 0;
            background-size: 700px 360px;
            width: 100%;
            height: 360px;
        }

        #container ul li div:nth-child(1) {
            background-image: url('./images/pic1.jpg');
            transform: translateZ(180px)
        }

        #container ul li div:nth-child(2) {
            background-image: url('./images/pic2.jpg');
            transform: rotateX(90deg) translateZ(180px);
        }

        #container ul li div:nth-child(3) {
            background-image: url('./images/pic3.jpg');
            transform: rotateX(180deg) translateZ(180px);
        }

        #container ul li div:nth-child(4) {
            background-image: url('./images/pic4.jpg');
            transform: rotateX(270deg) translateZ(180px);
        }

        #nextPic {
            display: block;
            width: 100px;
            height: 50px;
            margin: 0 auto;
        }
    </style>
</head>

<body>
    <div id="container">
        <ul>
            <li>
                <div></div>
                <div></div>
                <div></div>
                <div></div>
            </li>
            <li>
                <div></div>
                <div></div>
                <div></div>
                <div></div>
            </li>
            <li>
                <div></div>
                <div></div>
                <div></div>
                <div></div>
            </li>
            <li>
                <div></div>
                <div></div>
                <div></div>
                <div></div>
            </li>
        </ul>
    </div>

    <button id="nextPic">下一张</button>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script>
        var $container = $('#container')
        var $lis = $container.find('li')
        var lisCount = $lis.length
        // 1. 根据 li 个数，动态计算每个 li 的宽度与 left 位置等相关信息
        $lis.each(function (i) {
            $(this).css({
                width: 700 / lisCount,
                left: 700 / lisCount * i,
                'transition-delay': 0.1 * i + 's'
            })
                .children('div').css('background-position', -700 / lisCount * i + 'px 0')
        })

        // 2. 点击按钮，进行元素旋转
        var tempNum = 0
        //  2.1 为了避免快速频繁点击，需要对点击事件的触发进行限制
        //    - 性能优化方式：节流
        //        指的是，在规定的时间内，只能触发一次函数执行
        //        适用场景：频繁触发的操作，如 scroll 事件、频繁的点击

        // flag 的值，表示动画是否可以触发
        var flag = true
        $('#nextPic').click(function () {
            // 2.2 通过标记限制代码的执行
            if (!flag) {
                // 如果 flag 为 false，阻止动画执行
                return
            }
            // 阻止下次立刻触发
            flag = false

            // 更改标记值
            tempNum -= 90
            // 设置元素旋转到指定位置
            $lis.css('transform', 'rotateX(' + tempNum + 'deg)')

            // 2.3 每次动画执行后，下次执行延迟 2s
            setTimeout(function () {
                flag = true
            }, 2000)
        })
    </script>
</body>

</html>